//宏
#include<stdio.h>

//#define PRINT(N) printf("the value of " #N " is: %d\n", N)
#define PRINT(N,FORMAT) printf("the value of " #N " is: " FORMAT"\n", N)
//加#，N的参数不会被替换，而是他本身

//int main() {
//	int a = 10;
//	PRINT(a,"%d");
//	float b = 20.4f;
//	PRINT(b,"%f");
//}	

#define CAT(CLASS,NUM) CLASS##NUM
//##会把两个合并成一个符号

//int main() {
//	int class106 = 100;
//
//	return 0;
//}

#define MAX(x,y) ((x)>(y)?(x):(y))
//#undef MAX

//int main() {
//	int a = 5;
//	int b = 8;
//	int m = MAX(a++, b++);//带有副作用
//	//6 10 9
//#ifndef MAX
//	printf("1234567");
//#endif // DEBUG
//
//
//	return 0;
//}

//#define M 8
//int main() {
//#if M>7
//	return 1;
//#else
//	return 100;
//#endif // M>7
//
//
//
//#if !defined M
//	return 99;
//#endif // defined M
//
//	return 0;
//}
struct S
{
	char arr1;
	int a;
	char arr2;
};

#include<stddef.h>
int main() {
	struct S s = { 0 };

	offsetof(struct S, arr1);
	//成员相较于起始地址的偏移量
}